package com.permissionx.yuxiangdev

import androidx.fragment.app.FragmentActivity

object PermissionX {

    private const val TAG = "InvisibleFragment"

    /**
     * 首先获取FragmentManager的实例，然后调用findFragmentByTag()方法来判断传入的Activity参数中是否已经包含了指定TAG的Fragment，
     * 也就是我们刚才编写的InvisibleFragment。如果已经包含则直接使用该Fragment，否则就创建一个新的InvisibleFragment实例，
     * 并将它添加到Activity中，同时指定一个TAG。有了InvisibleFragment的实例之后，接下来我们只需要调用它的requestNow()方法就能去申请运行时权限了，
     * 申请结果会自动回调到callback参数中。需要注意的是，permissions参数在这里实际上是一个数组。对于数组，我们可以遍历它，可以通过下标访问，
     * 但是不可以直接将它传递给另外一个接收可变长度参数的方法。因此，这里在调用requestNow()方法时，在permissions参数的前面加上了一个*，
     * 这个符号并不是指针的意思，而是表示将一个数组转换成可变长度参数传递过去。
     */
    fun request(
        activity: FragmentActivity,
        vararg permissions: String,
        callback: PermissionCallback
    ) {
        val fragmentManager = activity.supportFragmentManager
        val existedFragment = fragmentManager.findFragmentByTag(TAG)
        val fragment = if (existedFragment != null) {
            existedFragment as InvisibleFragment
        } else {
            val invisibleFragment = InvisibleFragment()
            fragmentManager.beginTransaction().add(invisibleFragment, TAG).commitNow()
            invisibleFragment
        }
        fragment.requestNow(callback, *permissions)
    }

}